/**找出该数组中满足其和 ≥ target 的长度最小的 连续子数组
 * 返回其长度，不存在返回0
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 * 双指针 类似1658
 */
var minSubArrayLen = function (target, nums) {
    // 初始化结果,不可能超过nums.length
    let ans = nums.length + 1
    // s为子数组的和，left为左指针
    let s = 0, left = 0
    for (let i = 0; i < nums.length; i++) {
        // s先加上当前位的元素
        s += nums[i]
        // s如果大于等于target就从 最左边left 开始扣除，直到小于target
        while (s >= target) {
            // 当前子数组符合要求，加入ans计算过程
            ans = Math.min(ans, i - left + 1)
            s -= nums[left]
            left++
        }
    }
    return ans <= nums.length ? ans : 0
};